從里々移行至YAYA

本詞條主要是面向想從里々SHIORI移行至YAYA的人。
標題中有「☆」號的項目很可能非「はろーYAYAわーるど(紺野ややめ)」或「SimpleYAYAテンプレート」等範本就用不了。

里々移行至YAYA的好處

編程能力較強,人格對話以外的部份的編寫會變得容易。
當然這優勢不光YAYA獨有,華和梨也是另一個選擇。
如果使用不再更新(SHIORI出現了問題不指望會有修正)的話選擇就更多了。
總而言之選擇自己用得最就手就好。

YAYA能夠對檔案進行操作,又能夠使用正規表達式為其特徵,其他的SHIORI也能夠使用SAORI, 靠YAYA as SAORI把YAYA當成SAORI來用也一樣。
也就是說如果這是目的的話就沒有選擇YAYA的必要了。

注意點

  • 里々會自動插入等待、換行、說話者切換(\0、\1等),而YAYA則是全部Sakura Script由創師自己編寫。選項也變成必須以Sakura Script編寫。
  • YAYA基本上對話以外都以半形書寫。
  • 里々在沒有範本人格而靠參考著使用手冊使用satori.dll就可以成事,但YAYA的SHIORI/3.0設定腳本等(人格運作的齒輪部分)要自己由0開始寫出是很困難所以範本基本上是必須的。最少單使用SimpleYAYAテンプレート的yaya_shiori3.dic才可以。
  • 里々會自動載入副檔名為「.txt」而檔名開頭為「dic~」的辭書檔案,但YAYA為只載入yaya.txt中設定了的辭書。但這點有使任何名稱的辭書也能載入,辭書也能放到任何位置的好處。
  • 哪個辭書中都能編寫任何事件這點和里々一樣。
  • 不能靠資料夾切換載入的辭書。(想做多重人格的創師可參考多重人格モード的方法,但沒有切換資料夾的方式)
  • 里々能直接使用SAORI-basic(exe形式SAORI),但YAYA必須經PROXY.DLL這類SAORI來操作SAORI-basic。(詳細請參考SAORIの使い方

需要準備的東西

文字編輯器
編輯器語法高亮檔案一起安裝就更好。把副檔名.dic的檔案和語法高亮檔案關聯就更方便了。
範本人格
YAYAでゴーストを作る本wiki的範本中選一個自己合適的吧。如前所述基本上是必須的。

嘗試編寫YAYA 辭書

以起動事件為例舉出來看看。

基本

  • 里々
    *OnBoot
    :いっちばーん。

里々就會如此編寫。
YAYA的話就以下面的寫法編寫。

  • YAYA
    OnBoot
    {
     "\0\s[0]いっちばーん。\e"
    }

有些不明的符號,我們逐一看看吧。

  • 符號解說
OnBoot
最初為編寫代表起動事件的名稱。這裡和里々一樣。YAYA的話也叫為函數名稱。
開發文件/平台/SSP/Shiori中所寫的事件名稱在YAYA中都如此編寫。
「起動」「終了」「初回」等日文事件名稱為里々專用事件名稱的關係,在YAYA中使用不自行處理的話將不會被呼叫。
{ }
在事件名稱之後,事件內容會以這兩個符號圍起來。
YAYA中的SHIORI Event時必須以「事件名稱{事件內容}」形式編寫。
不好好圍起來的話來有錯誤出現使人格不能起動。
" "
對話等字串必須用這個符號圍起來。
和里々不同、不用這個符號圍起來的文字會被YAYA當成變數名或函數名
此外不使用「" "」而使用「' '」圍起來的文字中的變數將不會被展開。普通用「" "」就OK。
\0
「0號人物(主菜側)有所表示(說話或是轉變表情)了ー」的意思的Sakura Script。
在這之後所寫的文字會在主菜側對話框顯示。使魔側要說法的話用\1。
里々的話兩者間切換就只使用「:」。
\s[0]
顯示0號表情的Sakura Script。里々會以「(0)」編寫。
里々能把最初的(0)省略掉,但YAYA中不記入這個的話說法時會這這樣用之前的表情顯示。
\e
表示說話完結的Sakura Script。不記入通常不會有大問題但是請習慣在對話完結時記入它吧。

此外和里々不同YAYA不會自動插入等待。想插入等待時請以Sakura Script記入。 Sakura Script除了YAYA以外的SHIORI也能共通的關係,就不在本詞條說明了。
除此之外就是參照關發文件轉換文法了,雖然有點辛苦但是可以的話大家一起學YAYA吧。

符合最初寫好事件名稱、內容以「{}」圍起來的編寫規則的話寫成這樣

OnBoot {
"\0\s[0]いっちばーん。\e"
}

甚至寫成這樣也沒問題。

OnBoot { "\0\s[0]いっちばーん。\e" }

OnBoot和{之間的空白・換行有沒有也沒關係。[Tab]也可以。
請選舉自己看著舒適,編寫舒適的編寫方法。

OnBoot{"\0\s[0]いっちばーん。\e"}

基本上""之外的空白或[Tab]、換行會被無視、

OnBoot
  {
   
     "\0\s[0]いっちばーん。\e"
 
           }

寫成這樣也沒問題。
總之

【ここ】OnBoot【ここ】{【ここ】"\0\s[0]いっちばーん。\e"【ここ】}【ここ】

上面的【ここ】的位置中的空白(半形空白、全形空白、[Tab])或換行填多少個沒關係。

YAYA中使用這個結構能自由整理辭書。
這就是比里々的辭書更容易看的說法的其中一個理由。

換行

  • 里々
    *OnBoot
    :改行
    します。

里々會把辭書中對話的換行輸出,但YAYA必須使用Sakura Script的換行標籤才能換行
請在需要換行的位置記入「\n」。

  • YAYA
    OnBoot
    {
     "\0\s[0]改行\nします。\e"
    }

「像這樣辭書中沒換行很難看!」…的話

OnBoot
{
 "\0\s[0]改行\n/
 します。\e"
}

像這樣在行末加入「/」就就可以換行。
在喜歡的位置加入吧。

OnBoot
{
 "\0\s[0]/
 改行\n/
 します。/
 \e"
}
  • 壞例子
    OnBoot
    {
     "\0\s[0]改行\n
     します。\e"
    }

要注意用" "或' '圍起來的時候行末沒加入「/」就換行的話就會出現錯誤。(但不適用就後面所述的Heredoc格式)

Heredoc

「每個行末都要加入/太麻煩了……。」
YAYA Tc535-1起可以使用 Heredoc 格式,省卻加入「/」的麻煩。
利用「<<"」「">>」或「<<'」「'>>」代替「" "」或「' '」即可,要注意Heredoc的開閉符號必須各自在獨立一行
例子:

OnBoot
{
 <<"
 \0\s[0]
 改行\n
 します。
 \e
 ">>
}

隨機選擇單詞或文章

里々中會從多個同一事件中隨機選擇一個執行。

*OnBoot
:こんにちはー。

*OnBoot
:おっすー。

*OnBoot
:やっほー。

YAYA中這樣做的話會出現錯誤而起動不了。
YAYA中同一事件名稱的事件不能編寫多於一個。

取而代之,在{ }中以" "換行分隔的放在一起吧。

OnBoot
{
 "\0\s[0]こんにちはー。\e"
 "\0\s[0]おっすー。\e"
 "\0\s[0]やっほー。\e"
}

YAYA在{ }中以" "或' '圍起來的字串如有多個存在時,會在當中隨機選擇一個

除了換行也可以以「;」分隔寫在同一行。

OnBoot
{
 "\0\s[0]こんにちはー。\e" ; "\0\s[0]おっすー。\e" ; "\0\s[0]やっほー。\e"
}



厭倦編寫多個\0\s[0]和\e時

OnBoot
{
 "\0\s[0]"
 --
 "こんにちはー。"
 "おっすー。"
 "やっほー。"
 --
 \e
}

這樣寫也可以。
用「--」分隔時,所被分隔的各部份以" "或' '圍起來的字串會在當中隨機選擇一個,然後串成一句顯示


好像有點難明白還是用例子說明吧。

てんき
{
 "きょうは"//←<1>這2個中會選一個
 "明日は"//←<2>
 --
 "晴れ"//←(1)這4個中會選一個
 "雨"//←(2)
 "曇り"//←(3)
 "雷"//←(4)
 --
 "です。"//←只有1個時這個必定會選中
}

這樣編寫時
「きょうは雨です。」
「明日は曇りです。」
「きょうは晴れです。」
「明日は雷です。」
「明日は晴れです。」
…就可以做出像這樣隨機的文章。

因為是隨機所以可能會連續選到同樣的單詞。
此時大家會有像「咦?不能像里々那樣回避重複的嗎?」的疑問吧,答案當然有解──做得到。

OnBoot : nonoverlap
{
 "\0\s[0]"
 --
 "こんにちはー。"
 "おっすー。"
 "やっほー。"
 --
 \e
}

請在事件名稱後加入「 : nonoverlap」。同樣的字串不會再連續被選中。
想要從上而下順序選出時改為「 : sequential」。

另外、里々中能像這樣編寫在另一位置(單詞組)中取出單詞

*
:(季節)はいいね~
:どの季節でも言ってるジャン
@季節
春
夏
秋
冬

同樣的事在YAYA做就會是這樣子。

Talk
{
 "\0\s[0]%(季節)はいいね~\w9\1\s[10]どの季節でも言ってるジャン\e"
}

季節
{
 "春"
 "夏"
 "秋"
 "冬"
}

對話中記入「%(季節)」又或是「%季節」時,就能從叫「季節」的函數中取得結果。

里々中有由單詞組成時為「@季節」,有換行的文章為「*季節」的編寫規則,
YAYA中不區別單詞和文章所以單詞和文章都用「季節{ }」
OnBoot等SHIORI事件和單詞組兩者都是「函數」所以編寫方式是完全一樣的。

當然上面所寫的天氣對話

Talk
{
 "\0\s[0]"
 --
 "春"
 "夏"
 "秋"
 "冬"
 --
 "はいいね~\w9\1\s[10]どの季節でも言ってるジャン\e"
}

寫成這樣也可以。
這就是其他對話要用季節的單詞組的話,做一個「季節」的函數然後呼叫它的方式。

變數

會用的人就用,不用的人就可能完全不用的就是變數。
可能很多用變數來處理使用者名稱或起動次數・起動時間・好感度等東西。
里々中的變數只有1種,但YAYA有好幾種。
首先從這方面開始說明。

字串和數値

YAYA的變數有字串和數値二種。(正確來說有整數、實數(real number)、字串3種)

変数 = 1

這樣代入時変数的內容為數値的「1」

変数 = "1"

這樣用" "或' '圍起來的代入時変数的內容會變為字串的「1」。

和里々不同全形的「1」「2」「3」…等不能變成數値。
字串變數不能直接當作數値會進行比較或計算。
例如數字的數値「1」和「2」加起來的結果為「3」,但字串的「1」和「2」加起來就會把1和2串在一起變成「12」。
其他還有很多不同。請注意。

另外變數能在任何時候進行字串←→數値變換所以請放心。
請按用途變換。

  • 変数內容變成字串
    変数 = TOSTR(変数)
  • 変数內容變成數値
    変数 = TOINT(変数)

全域和局域

_変数名

名稱以「_」開頭的為局域變數

変数名

開頭沒有「_」為全域變數。

簡易來說「用完就消失」的是局域變數、「不刪除的話就一直存在」的就是全域變數。
里々的變數全都是全域變數呢。
使用者名稱和好感度等要一直使用的變數以外都用局域變數是基本。

那麼,局域變數的生存時期是
「只限現在的{ }内,以及其內容的更深的子階層中使用。壽命僅活在該{ }中。」
(從手冊中引用)

用語言說明說不清還是用例子說明吧:

ローカル変数テスト {
  {
  _変数 = 1
  }
結果 = _変数
}

這樣寫的話「_変数」從深層離開到淺層時就被消除的關係「結果」中將會是空的。

ローカル変数テスト {
_変数 = ""
  {
  _変数 = 1
  }
結果 = _変数
}

這樣寫的話「_変数」從淺層→深層→淺層…出來時,因為最初的淺層中有使用(宣告)的關係所以從深層回到淺層時「_変数」則不會被消除,「結果」中就會是1。
最初生成「_変数」時和「結果=_変数」在同一層就是重點。
總而言之想讓局域變數變得比較長效時就在最淺層中留一行像「_○○=""」的宣告就沒問題了。

代入變数

立起給禮物的旗子(flag)為例。
プレゼントフラグ的數値設為1。

  • 里々
    *プレゼントした
    $プレゼントフラグ=1
    :わーいありがとう!
  • YAYA
    プレゼントした
    {
    プレゼントフラグ = 1
    
     "\0\s[0]わーいありがとう!\e"
    }

就這樣。簡單。
和里々的不同之處為

  • 開頭不需要附上「$」。
  • 在{ }中編寫(在{ }外編寫的話會出錯)
  • 「=」等的計算符號、「1」等的數値要全部以半形(半角)編寫。 有在里々中在計算式或數値使用半角編寫的癖好的人也許會高興吧。

    【ここ】プレゼントフラグ【ここ】=【ここ】1【ここ】

【ここ】的部分輸入了空白也沒關係。
為了看得舒適而在計算符號的左右輸入半角空白的人也有很多。

代入字串時就像這樣。
在「プレゼント」的變數中代入「花束」這字串。

  • 里々
    *プレゼントした
    $プレゼント【タブ】花束
    :わーいありがとう!
  • YAYA
    プレゼントした
    {
    プレゼント = "花束"
    
     "\0\s[0]わーいありがとう!\e"
    }

不是數値時必須以" "或' '圍起來。
和編寫對話時一樣呢。 不要像里々那樣寫成「プレゼント【タブ】"花束"」。必須以「=」來代入。

プレゼントした
{
プレゼント = 花束

 "\0\s[0]わーいありがとう!\e"
}

不小心寫成這樣的話「プレゼント」中就會變成空的了。
要問為什麼的話,YAYA中不是「"花束"」而是「花束」的話就會理解成「叫『花束』的變數」了
因此「プレゼント」變數中會代入叫「花束」的變數中的內容
而叫「花束」的變數因為不存在而變成空的,就是這原因。

在里々中要寫成那樣子的話,就會是這樣。

*プレゼントした
$プレゼント【タブ】(花束)
:わーいありがとう!

這裡里々和最初的例子相反的關係可能會有點混亂吧。

計算變數

  • 里々
    *プレゼントした
    $好感度=(好感度)+1
    :ユーザーさんだいすき!
  • YAYA
    プレゼントした
    {
    好感度=好感度+1
    
     "\0\s[0]ユーザーさんだいすき!\e"
    }
    這個也很簡單。
    里々中像「好感度=(好感度)+1」這樣在右側的變數必須要用()圍起來,但YAYA則沒有這個必要。
    這就如先前所說一樣,沒有用" "或' '圍起來的字串就會被理解成變數、函數名(只有半角數字時為値)。

    此外YAYA可以把上面的例子省略成這樣。
プレゼントした
{
好感度++

 "\0\s[0]ユーザーさんだいすき!\e"
}

「好感度++」是「好感度增加1」的意思,和「好感度=好感度+1」同義。
「好感度--(半角減號2個)」的話就是減1。
「好感度+=2」的話就和「好感度=好感度+2」一樣,「好感度-=2」就和「好感度=好感度-2」一樣。
而其他YAYA中能使用的計算符號就在另一條目中說明。(専門用語較多比較難理解)

里々和一樣,文字間也可加算。

プレゼント = "花" + "束"

這樣寫時變數「プレゼント」中會變成「"花束"」。

變數當然也可用在對話之中。

プレゼントした
{
プレゼント="花束"

 "\0\s[0]わーい\w6%(プレゼント)だー!\w9\w9ありがとう!\e"
}

對話框中會顯示「わーい花束だー!ありがとう!」。
寫法和上面說明了的單詞組在對話中使用是完全一樣的呢。
在這裡里々和YAYA都沒變。

想確認變數有沒有好好儲存時把人格關閉後用請文本編輯器開啟「yaya_variable.cfg」。
上面的例子的話

プレゼント,"花束",,

有像這樣的一行話就是儲存成功了。
此外數値型的變數為

プレゼント,1,,

像這樣變數中的數字沒有以" "圍起來。

R0、S0、A0等在YAYA中的寫法

全部變成半角。和里々不同,不寫成全角。

  • 里々
    R0 R1 R2 ...
  • YAYA
    reference[0] reference[1] reference[2] ...

舊範本的話就是reference0 reference1 reference2 ..
新範本則按設定編寫。

  • 里々
    S0 S1 S2 ...
  • YAYA
    valueex0 valueex1 valueex2 ...

SAORI的使用方法請參照「SAORI」條目。

  • 里々
    A0 A1 A2 ...
  • YAYA
    _argv[0] _argv[1] _argv[2] ...

就如所見的是局域變數。

像ssu所做的事

除了「條件分支」、「比較」和「計算」會用不一樣的方法達成外,
其他的差不多所有的都能用YAYA的系統函數做到同樣的事。

請參考関数用途別一覧
「這樣很難找到要用的項目!」的人可以看YAYAシステム関数リファレンス

SAORI

使用方法

  • 里々
    (mciaudio,load,鳥の詩.mp3)(mciaudio,play)
  • YAYA
    FUNCTIONEX( 'mciaudio.dll' , 'load' , '鳥の詩.mp3' )
    FUNCTIONEX( 'mciaudio.dll' , 'play' )

不需要像里々那樣把要用的SAORI在事前設定。
直接指定從yaya.dll的位置起的相對路徑即可。

此外「mciaudio.dll」和「鳥の詩.mp3」都不和「yaya.dll」在同一資料夾中,而是在「saori」子目錄時

FUNCTIONEX( 'saori\mciaudio.dll' , 'load' , '鳥の詩.mp3' )

就這樣寫。

SAORI( 'mciaudio.dll' , 'load' , '鳥の詩.mp3' )
SAORI( 'mciaudio.dll' , 'play' )

不用「FUNCTIONEX」而用「SAORI」也可以。
用哪個也沒差的話就用「FUNCTIONEX」吧。

返回值(Result)

SAORI執行函數後會返回的值。
返回值要就這樣顯示的話也可以直接讓它埋在對話中
(但是要注意SAORI執行函數的引數不能用" "而要用' '圍起來。" "中不能再編寫" "的關係。)

"\0\s[0]クリップボードにある文字を取り出します。\n「%(FUNCTIONEX( 'saori\textcopy.dll' , 'コピーする文字' ))」\e"

用一個變數儲存起來再用也可。

変数 = FUNCTIONEX( 'saori\textpaste.dll' )

Result就這樣在對話框中顯示的話會有困擾時就適當地把它代入到局域變數中吧。

返回值(Value[n])

就如上面所寫里々用「S0 S1 S2 ..」而YAYA則以「valueex0 valueex1 valueex2 ...」編寫。

詳細請看這些條目。

☆顯示現在時間

請參照システム辞書/yaya_shiori3.dic - 時刻系関数
記憶體用量、傳遞者抬頭的變數也可以找到。

時間をおしえる
{
 "\0\s[0]ただいま%(hour)時%(minute)分%(second)秒で~す。\e"
}

「不能像里々那樣用日文編寫的話不要ー」的人可以參考範本自己編寫也可以。

年 { GETTIME[0] }
月 { GETTIME[1] }
日 { GETTIME[2] }
分 { GETTIME[5] }
秒 { GETTIME[6] }

時間をおしえる
{
 "\0\s[0]ただいま%(時)時%(分)分%(秒)秒で~す。\e"
}

曜日以漢字表記的方法在這裡。(已在SimpleYAYAテンプレート中刊載)

☆計時器

「$○○タイマ【タブ】秒数」用YAYA寫。

5秒待たせるイベント
{
 "\0\s[0]それでは5秒お待ち下さい。\e"
 
 SHIORI3FW.SetDelayEvent( '5秒待った' , 5 )
}
5秒待った
{
 "\0\s[0]お待たせしました。\e"
}

replace.txt

用#define也可做到同樣的事,但要注意不會失敗。

☆replace_after.txt

用OnTranslate或OnTranslateInternal事件可以做到。
要用自動等待等的話建議使用OnTranslateInternal事件。
(用OnTranslate的話連例如在線新聞的內容也一併轉換)

  • 對話中自動插入等待的例子
    OnTranslateInternal
    {
    	_text = _argv[0]
    	_text = REPLACE(_text, "…", "…\w3")
    	_text = REPLACE(_text, "、", "、\w5")
    	_text = REPLACE(_text, "。", "。\w9")
    	_text
    }

像Φ那樣把危險的符號無效化

和里々一様、YAYA也有在對話中不能編寫的符號。
里々可以在符號前加上「Φ」來把它無效化。
YAYA則用CHR函數編寫。

參考這些網頁,查找想編寫的符號的上位3位元(上面的網頁的横軸的編號)和上位4位元(縱軸),以

CHR(0x(上位3位元)(上位4位元))

編寫。

例如「1」的話就是

CHR(0x31)

必須以半角編寫。

  • 「" "」中編寫「"」的例子
記号表示テスト
{
	"\0\s[0]記号「%(CHR(0x22))」をバルーンに表示\e"
}

注釋

把#替換為//即可。

  • 里々
    # 起動イベント
    *OnBoot
    :こんにちはー。
  • YAYA
    // 起動イベント
    OnBoot
    {
     "\0\s[0]こんにちはー。\e"
    }

也可放到這個位置。
也就是說「//」位置起的右方會被注釋掉。  

OnBoot
{
 "\0\s[0]こんにちはー。\e"// 起動トーク
}

以「/*」可「*/」圍起來的也會被注釋掉。
能把多行圍起來所以行數多時這方法比較方便。但是從哪而起直到哪裡被注釋掉也許比例難找?(譯者按:語法高亮是好幫手。)

/*
起動イベント
一番最初に起動した時呼ばれる
*/
OnBoot
{
 "\0\s[0]こんにちはー。\e"
}

YAYA比里々容易注釋,也方便使用。
為了讓以後再審視時可靠注釋幫助自己回想那段代碼的用途或想法就請多多注釋吧。


首頁   編輯 封鎖 差異 備份 上傳檔案 複製 變更名稱 重新載入   新建條目 一覽 搜索 最近的變更   幫助   最近更新的RSS
Last-modified: 2012-09-13 (四) 23:05:36 (4058d)